// 我自己写的服务器

// 请求回来http和fs
const http = require('http')
const https = require('https')
const fs = require('fs')
// 把createProxyMiddleware解构出来
const { createProxyMiddleware } = require('http-proxy-middleware')
// const { response } = require('express')
// const {u} = require('tar') // 不知道什么意思
// const { response } = require('express')

// 列表页的数据地址
let fn = createProxyMiddleware({
  target: 'https://www.ymatou.com/products/api/getProductListByCondition',
  changeOrigin: true,
  pathRewrite: {
    '/lieBia': ''
  }
})
// 详情页的数据地址
let fn2 = createProxyMiddleware({
  target: 'https://www.ymatou.hk/product/api/GetProductAsynDetails',
  changeOrigin: true,
  pathRewrite: {
    '/xiang': ''
  }
})

// 搭建服务器
http.createServer((req, res) => {
  // 接口
  // api是什么？//api是发送发送Ajax时的接口，会产生的
  if (req.url.startsWith('/api')) {
    // 注册
    if (req.url === '/api/register') {
      // 接受post提交上来的数据，将注册页面数据转成字符串
      let str = ''
      req.on('data', chunk => {
        str += chunk.toString()
      })
      // console.log(str)
      req.on('end', () => {
        // 接收到数据以后，需要存起来
        // str就是接收到的数据---字符串
        // 先将字符串转成对象
        let arr = str.split('&') // &之间炸开
        let obj = {} // obj是将str转成的对象
        arr.forEach(item => {
          let brr = item.split('=') // 遍历arr中的每个数据，然后用=炸开
          obj[brr[0]] = brr[1] // brr[1]比如说姓名翠花的翠花，obj里面是姓名等于翠花
        })

        // 从data.json中判断是否有当前用户名
        // 读取data.json中的数据
        let data = fs.readFileSync('./project/dist/json/data.json')
        data = data.toString()
        // 判断data中是否有数据
        let pdj = {
          code: 0,
          msg: '用户名被占用了'
        }
        // 判断是否是第一次注册，第一次注册，data是空字符串
        if (data === '') {
          // 准备数组，将刚刚提交上来的数据存进文件里
          data = []
          data.push(obj)
          fs.writeFileSync('./project/dist/json/data.json', JSON.stringify(data))
          pdj = {
            code: 1,
            msg: '注册成功，请登录'
          }
          res.end(JSON.stringify(pdj))
          return false
        }
        // 如果不是第一次提交，data中有数据
        data = JSON.parse(data)
        // 先判断data中是否有obj中的username
        // 判断读取出来的数据(转成数组)，判断是否有刚刚提交上来的用户名
        // 判断用户是否存在
        let index = data.findIndex(item => item.username === obj.username)
        // 不存在，加入,没有找到，用户名没有被占用，直接存进去
        if (index < 0) {
          data.push(obj)
          data = JSON.stringify(data)
          fs.writeFileSync('./project/dist/json/data.json', data)
          pdj = {
            code: 1,
            msg: '注册成功'
          }
          res.end(JSON.stringify(pdj))
        }
        // 找到数据了，说明用户名被占用了
        res.end(JSON.stringify(pdj))
      })
    }
    // 登录
    if (req.url === '/api/login') {
      let str = ''
      req.on('data', chunk => {
        str += chunk.toString()
      })
      req.on('end', () => {
        let arr = str.split('&')
        let obj = {}
        arr.forEach(item => {
          let brr = item.split('=')
          obj[brr[0]] = brr[1]
        })
        // 读取json文件里的buffer，转换为字符串
        let data = fs.readFileSync('./project/dist/json/data.json')
        data = data.toString()
        data = JSON.parse(data)
        let userInfo = data.find(item => item.username === obj.username)
        userInfo = JSON.stringify(userInfo)
        let index = data.findIndex(item => item.username === obj.username)
        let pdj = {
          code: 1,
          msg: '登录成功',
          userInfo: userInfo
        }
        if (index < 0) {
          pdj = {
            code: 3,
            msg: '用户名不存在，请先注册'
          }
          res.end(JSON.stringify(pdj))
        } else {
          // 找数据，找不到就登录失败，找到了就相应登录成功
          let index1 = data.findIndex(item => item.username === obj.username && item.password === obj.password)
          // 如果index1不存在
          if (index1 < 0) {
            pdj = {
              code: 2,
              msg: '登录失败，用户名或密码错误'
            }
            res.end(JSON.stringify(pdj))
          }
        }
        res.end(JSON.stringify(pdj))
      })
    }
    // 个人信息显示，修改
    if (req.url==='/api/editinfo') {
      let str = '';
      req.on('data', chunk => {
        str+=chunk.toString()
      })
      req.on('end', () => {
        let arr = str.split('&')
        let obj = {}
        arr.forEach(item => {
          let brr = item.split('=')
          obj[brr[0]]=brr[1]
        })
        let data = fs.readFileSync('./project/dist/json/data.json')
        data = data.toString()
        data = JSON.parse(data)
        let pdj = {
          code: 1,
          msg:"修改个人信息成功，请重新登录"
        }
        let item = data.find(item => {
          return item.username===obj.username
        })
        item.username = obj.username
        item.nickname = obj.nickname
        
        item.tel = obj.tel
        fs.writeFileSync('./project/dist/json/data.json',JSON.stringify(data))
        res.end(JSON.stringify(pdj))
      })
    }
    // 修改密码
    if (req.url === '/api/editpsd') {
      let str = ''
      req.on('data', chunk => {
        str +=chunk.toString()
      })
      req.on('end', () => {
        let arr = str.split('&')
        let obj = {}
        arr.forEach(item => {
          let brr = item.split('=')
          obj[brr[0]]=brr[1]
        })
        let data = fs.readFileSync('./project/dist/json/data.json')
        data = data.toString()
        data = JSON.parse(data)
        let pdj = {
          code: 1,
          msg:"修改密码成功，请重新登录"
        }
        let index = data.findIndex(item => item.password === obj.oldPassword && item.username === item.username)
        if (index < 0) {
          pdj = {
            code: 0,
            msg:'旧密码输入错误，请重新输入'
          }
          res.end(JSON.stringify(pdj))
        }
        let item = data.find(item => {
          return item.username===obj.username
        })
        item.password = obj.newPassword
        fs.writeFileSync('./project/dist/json/data.json', JSON.stringify(data))
        res.end(JSON.stringify(pdj))
      })
    }
   
  } else {
    if (req.url === '/layer/theme/default/layer.css?v=3.5.1') {
      let data = fs.readFileSync('./project/dist/layer/theme/default/layer.css')
      res.end(data)
    } else if (req.url === '/layer/theme/default/icon.png') {
      let data = fs.readFileSync('./project/dist/layer/theme/default/icon.png')
      res.end(data)
    }
    // 发送列表页Ajax
    else if (req.url.includes('/lieBia')) {
      fn(req, res)
    }
    // 发送详情页的
    else if (req.url.includes('/xiang')) {
      fn2(req, res)
    }
    //  首页
    else if (req.url === '/') {
      let data = fs.readFileSync('./project/dist/index.html')
      res.end(data)
    }
    // 其他HTML文件
    else if (req.url.endsWith('.html')) {
      let data = fs.readFileSync('./project/dist' + req.url)
      res.end(data)
    }
    // 如果路径中包含？，将后面的数据去掉，保留文件部分，方便后续读取
    else if (req.url.includes('?')) {
      let index = req.url.indexOf('?')
      req.url = req.url.slice(0, index)
      let data = fs.readFileSync('./project/dist' + req.url)
      res.end(data)
    }
    //  css文件
    else if (req.url.endsWith('.css')) {
      let data = fs.readFileSync('./project/dist' + req.url)
      res.end(data)
    }
    // js文件
    else if (req.url.endsWith('.js')) {
      let data = fs.readFileSync('./project/dist' + req.url)
      res.end(data)
    }
    // 图片
    else if (req.url.startsWith('/images')) {
      let data = fs.readFileSync('./project/dist' + req.url)
      res.end(data)
    }
    // 小图标
    else if (req.url === '/favicon.ico') {
      let data = fs.readFileSync('./project/dist/favicon.ico')
      res.end(data)
    }
  }
}
).listen(19109)
